Typically, when a user wishes to print a document, the host computer first translates the document from a language that the host application understands to one that the printer understands. By proper use of the printer language, the host computer instructs the printer what to print. In a modern printing environment, there may be multiple printer languages, also referred to as personalities, available to the user. Each personality, in turn, may access multiple fonts in order to properly process a print job. Hence, prior to the present invention a printer with multiple language personalities may have multiple copies of the same font.
As briefly stated above, a software/firmware module, which embodies the necessary instructions to properly accept incoming data in a particular printer language and convert that representation to a physical one, is referred to as a printer personality. In performing this task, the personality may do things beyond the scope of this discussion such as accepting and storing downloaded fonts, selecting and deselecting printer settings, giving feedback to the host on the status of a print job, etc.
Each personality uses resources of the printer to execute its job. Such resources include Random Access Memory (RAM), Read Only Memory (ROM), Hard Disk, I/O channels, control panel, paper trays, and print engine. As mentioned earlier, multiple personalities may reside in the printer allowing the user to use the same printer with a variety of applications and hardware. These personalities may share printer resources or partition the resources in such a way that there is minimal interaction between personalities. Examples of printer languages include PCL.TM., ESC/P.TM., PostScript.TM., and PCPR-201. PCL is a trademark of Hewlett Packard Company; ESC/P is a trademark of Seiko Epson Kabushiki Kausha.; PostScript is a trademark of Adobe Systems Inc.
Characters, which are printed on a page, typically come from fonts that reside in the printer. A font is a collection of characters that have similar characteristics. As is understood in the art, there are two primary formats, bitmap and outline.
Bitmap fonts represent each character in bitmap form. These fonts are generally stored in the printer in some native resolution. Use of a bitmap font is quick and easy because the printer personality directly accesses the bitmap of the character that it is looking for. In a printing environment where multiple printing resolutions are available or multiple sizes of characters are required to be printed, post processing of the character bitmap must be performed. This post-processing will degrade the quality and performance of the printer. Typically, line printer based personalities use bitmap fonts.
The other major type of fonts are outline fonts, which are more complex and flexible. Instead of each character stored as a bitmap, outline fonts store each character as a set of instructions that describes the characters. Associated with a class of outline fonts is a module called a rasterizer or scaler. This rasterizer processes the instructions describing the character and produces a bitmap of the character. Outline fonts allow the personality to access characters and ultimately get bitmaps of those characters in various sizes, resolutions, orientations, and other characteristics. Thus, with one font description, characters of multiple sizes, resolutions, etc., can be used. Examples of outline fonts include Apple's TrueType.TM. format and Adobe's Type I font format.
Some printing environments or situations add extra challenges to supporting multiple personalities or multiple fonts. For example, both these challenges exist in a Japanese printing environment. There are a variety of printer languages in the Japanese market; character based software typically uses line printer languages while Graphical User Interface (GUI) based software uses page description languages. For line printer based personalities bitmap fonts may be used, for page description personalities outline fonts may be used.
The size of Japanese fonts presents an additional challenge. The Japanese character set is large (4000-6000 characters). Storage of these large fonts, at 3-4 Mb typically, is very expensive. Furthermore, enhancements such as scaling in one or two dimensions, italics, and character rotations are often used. Most rasterizers support the major enhancements. Therefore, outline fonts are well suited for representing Japanese fonts. However, because of the size of these fonts, it is necessary that any potential duplication of the fonts be eliminated.